#! /usr/bin/env node

const fs = require('fs');

const path = require('path');

console.log(process.argv);

let argv = process.argv,
    target = '';

if(argv[2] && argv[3]){
    target = argv[3];
}else{
    console.log('参数有误')
}

//1.读目录是异步的  fs.readdir(path,(error,data) => {})  异步

//函数需要关注的四个方面：1.函数的参数  2.函数的返回值   3.函数的功能   4.函数何时调用

function readDir(url){
    return new Promise((resolve,reject) => {  
        
        //promise  三个状态：pending 进行中  reject 已失败  resolve 已成功

        //进行中-->已失败   进行中---> 已成功 状态一旦发生改变就不会再改变
        fs.readdir(url,(error,data) => {
            if(error){
                //错误  失败的状态
                reject(error);
            }else{
                //数组  成功的状态
                resolve(data);
            }
        })
    })
}

// console.log(readDir('./src')); //promise实例

let lineObj = {}; //存储当前需要输出的线 |---- | | |---



/***
 * |--- src
 * |    |--- css
 * |    |    |--- index.css
 * |    |--- js
 * |    |    |--- index.js
 * |--- bin.js
 * |--- dir.md
 * |--- package.json
 * 
 * {
 *   './':'|---',
 *    './src':'|   |---'
 *    ''
 * 
 * }
*/

let fileNum = 0;  //文件的数量
let dirNum  = 0;  //文件夹的数量

function read(url){
    let absUrl = path.join(process.cwd(),url);//绝对路径  /  相对路径 ./
    // console.log(url);
    if(!lineObj[url]){
        // console.log(url.split('\\'));
        let len = url.split('\\').length;
        lineObj[url] = '|---';
        if(url !== './'){
            for(let i = 0;i<len;i++){
                lineObj[url] += '|---';
            }
        }
    }
    if(fs.existsSync(absUrl)){
        //存在
        // let dirArr = await readDir(absUrl);
        let dirArr = fs.readdirSync(absUrl);
        console.log(dirArr);
        dirArr.forEach(item => {
            let targetUrl = path.join(absUrl,item);
            //是文件夹还是文件
            if(fs.statSync(targetUrl).isDirectory()){
                //文件夹
                console.log(lineObj[url]+item);
                dirNum++;
                fs.appendFileSync(path.join(process.cwd(),target),lineObj[url]+item+'<br/>')
                read(path.join(url,item));
            }else{
                fileNum++;
                //文件
                console.log(lineObj[url]+item);
                fs.appendFileSync(path.join(process.cwd(),target),lineObj[url]+item+'<br/>')
            }
        })
    }else{
        console.log('当前路径不存在')
    }
}

read('./')

console.log(fileNum,dirNum)

fs.appendFileSync(path.join(process.cwd(),target),`文件${fileNum},文件夹${dirNum}`)

